ハードディスクのパフォーマンス
ハードディスクのパフォーマンスを図るバロメータは、その読み取り速度が速いのか遅いのかだろう。極めて単純ではある。しかし速度をひらすら追求する、たとえばレーシングカーにしても、直線を極めて高速に走れる車が、同時にコーナリングも極めて速いとは限らない。それぞれ要求されるスペックが違うからである。似たようなことが実はハードディスクにもいえる。直線にあたるのが所謂シーケンシャルリードであり、コーナリングがランダムリードだろうか。それぞれに分けて考察する必要がある。
ハードディスクのカタログには、以下のような項目がある。
また車の話になって恐縮だが、いい例なのでつきあってほしい。車のエンジンのカタログスペックに、最高出力(PS)と最大トルク(kg-m)というものがあるのを知っているだろうか。最大トルクとは、そのエンジンが1回転する間にどれくらいの仕事ができるのかを示す数値でkgで表す。勿論重ければ重いほど、そのエンジンは強いということになる。
しかしいくら1回転でできる仕事量が大きくても。1回転するのに1時間かかっている場合と、1秒で回ってしまうのでは、同じように評価できるだろうか。同じはずがない、当然後者のエンジンの方が遥かに優れている。実はこのようにトルクという時間要素の入らない力に、時間軸の要素を加味して評価したものが「最高出力」なのである。
簡単にいうと、最高出力=回転数×トルク である。同じトルクでもどんどん速くぶん回せば、それだけ多くの仕事ができる、所謂馬力(最高出力)のあるエンジンになる訳である。勿論逆に同じ回転数ならトルクの高い方が強いエンジンである。つまり自動車のエンジンは回転数を上げることと、トルクを上げることでパフォーマンスを上げてきた。トルクを上げるには、排気量を増やしたり、ターボチャージャーやスーパーチャージャーなどの加給器を使ったりして、兎に角沢山のガソリン(厳密には気化気)を爆発させることを目指す。一方回転を上げるために、稼動部分を軽くしたり、排給気タイミングの工夫(ツインカムにするなど)を行う。
いずれにしても、最高出力を高めることが目的であり、回転数アップと、トルクアップはそのための方便、通過点に過ぎない。
車のカタログには、「最高出力 150ps/5000rpm」など書かれているだろう。これは150馬力という最高出力を毎分5000回転の時に出すということを示している。この時の回転数は、最高出力を示す数値のいわば補助的な情報に過ぎない。もし「俺の車、280馬力だぜ」と威張っている友人に、「その最高出力は何回転の時にでるの」と聞いてみよう。かなりのマニアでない限り、答えられないはずである。
これをハードディスクに当てはめるとこうなる。
内部データ転送速度 = 回転数×記録(線)密度
因みにハードディスクの内部データ転送速度は、習慣的に「bps」つまり「bit per second」(毎秒何ビットか)で表す。bytes(バイト)ではないので、気をつけよう。また「内部データ転送速度(Internal Data Transfer Rate)」を「メディアデータ転送速度(Media Data Transfer Rate)」と呼ぶことも多い。
ハードディスクのシーケンシャル速度を決定するのは、結局ディスクの生の読みとり速度であるところの、内部データ転送速度であり、回転数はそれを導く右辺(要素)に過ぎない。たとえ回転が速くても記録密度が低ければ、内部データ転送速度は遅くなり、ひいてはこのハードディスクは遅いということになるのだ。勿論同じ記録密度なら回転数の速い方が速いのだが。
ハードディスクの場合、車のエンジンのように無数?の回転数がある訳ではない。現在10000rpm、7200rpm、5400rpm、4500rpmなどいくつかに限られている。なぜもっと沢山のバリエーションがないのだろうか。それになぜもっともっとCD-ROMのようにどんどん回転速度が上げていかないのだろうか。
回転を上げにくい理由の一つに、ハードディスクのような磁気記録の場合、ディスククラッシュの問題がある。高速で回転させた場合、もしヘッドがディスク面に接すると当然即座にディスクはクラッシュする。ならヘッドを離せばいいと思うかもしれないが、磁気の場合、距離が離れると幾何級数的に磁力が落ちてしまう。できる限り近くに置きたい。欲を言えば本当は接していたいくらいなのである(フロッピーの場合接している)。接しないようにして、しかもできる限り近づくという、この微妙な距離を保つのが、回転が上がれば上がるほど難しくなるのは容易に理解できるだろう。
またハードディスクの場合、特に記録密度(とりわけ線密度)との関係で、あえてあまり回転を上げないという事情もある。
たとえばCD-ROMの場合、読み取りヘッドのレーザーを工夫すると、単位時間あたりにして、より沢山のビットが読めるようになる。単位時間あたりの読み取りビット数が増えた場合、2つの相反する方向にその効果を利用できる。一方はディスク面の記録密度を上げること。もう一方はより速く回転させることである。しかしCD-ROMは規格で決まっており、ディスク面の記録密度を勝手に変更することはできない。レーザーの工夫は回転を上げることにしか向けることができない訳である。だから、CD-ROMはどんどん回転数が上がるのである。MOなどは書き込みもあるので、他のドライブとの互換性などから、回転もやたら上げることができない。このあたりディスクとドライブが別にあるリムーバブルディスクの宿命である。
一方ハードディスクはヘッドとディスクが一体であり、規格に縛られることがないので、ヘッドの工夫はどのような方向にも利用できる。先ほども述べたように回転を上げることは難しい部分もあるので、いきおい記録密度に向けられる訳である。ハードディスクがどんどん容量が増すのは、こんな理由がある。
ディスクは「面」の世界、つまり2次元の世界なので、記録密度にも縦と横がある。縦にあたるのが、トラックの線密度(bit per inchで表現)であり、横にあたるのが、トラック間密度である。共に向上を目指している訳だが、主に急激に伸びているというか、工夫をし易いのは、線密度の方だ。MRヘッドどかGMRヘッドとかの採用で、縦方向の読み取り精度が上がる。つまり単位時間あたりの読み取りビット数が増える。また密度があがることによって、速度にも影響するのはこの線密度の方であることは理解できると思う。
ここで気をつけたいのは、結局読み取り速度を決定するのは「ヘッド」だということだ。ヘッドによって単位時間あたりの読み取りビット数が決まるので、それを密度側に振り分けようが、回転速度側に振り分けようが、結局同じである。これを示す例がある。
ここに回転数が5400rpmのハードディスクディスクがあるとしよう。このハードディスクを回転数だけ7200rpmにしたらどうなるであろう。そうヘッドがビットの変動についていけず、読めなくなってしまうのである。もし同じヘッドのまま回転を上げるなら、密度を落とす他ない。結局速度は変わらず、回転を上げるメリットは何もないことになり、完全に本末転倒である。
よく同じメーカーの同じシリーズのハードディスクに7200rpm版と5400rpm版があるが、もしヘッドが同じ場合、高回転版は密度を下げなければならないため、高回転にした意味がないので、こういう場合はちゃんと高回転版はヘッドによりいい素材を使っているはずである。それでも回転数の差だけ、よりいいものを使うこともなかなかできないようで、若干線密度を落としているのが現状のようだ。以下に最近のIBMのIDEハードディスクの例を挙げてみた。DPTA、DJNA、DTTAの3シリーズである。
回転数 | 内部転送速度 | 線密度 | |
DPTA3700 | 7200rpm | 284Mbps | 282kbpi |
DPTA3500 | 5400rpm | 246Mbps | 287kbpi |
DJNA3700 | 7200rpm | 223Mbps | 219kbpi |
DJNA3500 | 5400rpm | 195Mbps | 234kbpi |
DTTA3700 | 7200rpm | 175Mbps | 178kbpi |
DTTA3500 | 5400rpm | 163Mbps | 196kbpi |
どのシリーズも一様に7200rpm版の方が、線密度が低いのがわかるだろう。それでも回転数が速いので、なんとか内部データ転送速度は優位を保っている。しかしそれも同じシリーズでの話である。IBMのIDEハードディスクとして初めて7200rpmを出したDTTAシリーズの7200rpm版の内部データ転送速度は、175Mbpsに過ぎず、最新のDPTAシリーズはおろか、その前のDJNAシリーズと比べても、その5400rpm版(DJNA3500は195Mbps)より遅い訳である。
これを見ても、ハードディスクは「回転数」ではないということがよくわかる。ではどうしてこれまで、こんなに「回転数」は重視されてきたのだろうか。実はそれには事情があったし、その事情は今でも皆無という訳ではない。
ここに全く同じ内部データ転送速度で、回転数の違う(たとえば7200rpmと5400rpm)ハードディスクがあるとしよう。これまでの話だとこのハードディスクのパフォーマンスは全く同じということになる(一応後で説明するシークタイムなどの別のパフォーマンス要素も同じだとする)。しかし実際は若干回転数の速い方が有利なのである。つまり、ハードディスクの回転数は、車のエンジンの回転数ほど補助的な数値という訳ではない。
ヘッドがあるトラックのある1bitのデータを読もうとして、そのトラックに移動(シーク)した場合、ヘッドはそのトラックにたどり着いた瞬間に目的のデータを読めるだろうか? 実はすぐには読めないはずである。そのトラックのどこにそのデータがあるか分からないが、ヘッドがそのトラックにたどり着いた時、もしそのデータがちょうど通り過ぎたばかりであったら、もう1回転するまで待たねばならない。
勿論偶然すぐ読める場合もあろう。しかし平均するとちょうど1回転する時間の半分が待ち時間になる。これを「平均回転待ち時間」と呼び、賢明な読者ならもうお分かりであろう、そう、これは絶対に回転数の速い方が一律に速いのである。7200rpmの場合、4.17msecで、5400rpmの場合、5.56msecである。これは回転数によって決まる不動の値だ。最小シークタイムが1msecを割りはじめた今日、1.4msecの違いは決して小さくない。
もっともシーケンシャルリードの場合、スキューという技術によって、回転待ちを殆ど無くすように工夫されている。つまり最小シームタイムから計算して、ちょうど次のデータがすぐに読めるような位置にくるように、隣あったトラック間で、データの書き込み位置をずらすのである。従ってシーケンシャルリードにおいては、回転待ち時間は全く無視していいほど問題にならない。
しかしシーク、つまりトラック間移動が頻繁に発生するランダムリードの場合、なかなか無視できない数値になる可能性がある。ランダムリードに関しては、やはりシークタイム抜きには考察できない。
シークタイムとは、ヘッドが目的のトラックに移動する時間である。よく最大、平均、最小の3つがカタログスペックとしてある。最大シークタイムとは、最外周から最内周に移動する時間、一方の最小シークタイムは、隣のトラックへ移る時間で、平均シークタイムはその平均ということになる。どの数値がより重要かはよく分からない。普通は平均シークタイムが代表するようだが、それ程あちこちにデータが散在しているとも思えないので、若干最小シークタイムが重要なのではないだろうか。
ハードディスクによってかなり違うが、最小シークタイムは0.7msecから3msecあたりだろうか。シーケンシャルリードの場合、7200rpmで1周8.33msecなので、8msecデータを読んで、1msecシークという休みが入ることになる程度なので、シークタイムがそれ程影響することはないだろう。しかしランダムリードの場合、非常に頻繁にシークが発生する訳で、その短さは重要である。
さらに回転待ち時間は1シークあたりにかかってくる時間なので、同様に無視できない。5400rpmの場合、平均回転待ち時間は平均シークタイムに近く、最小シークタイムよりは遥かに長い。
しかし現実にはキャッシュという技術によって、このランダムシークの問題の多くを解決してくれる。実際あるトラックを読んだ場合、たとえそのトラックの100分1のデータしかその場では、必要としなかった場合でも、どうせ1トラックを読んだのだから、バッファにキャッシュておく。もしそのデータがまだキャッシュされている間に、OSがそのトラックのデータを要求した場合、実際にそのトラックにシークすることなく、バッファから読めばいい。このバッファへのキャッシュによって、実際シークは著しく減少しているのである。当然このキャッシュをより効率的に行うためにもバッファ量は多いに越したことはない。
また以上の話はハードディスク側にもつバッファのことだが、多くのOSではOS側でもメモリにキャッシュしている。これをソフトキャッシュと呼んでいるが、実際これもかなり効いていて、ハードディスクよりもはるかにシークタイムの長いPDやMOでも実用になるのは、これに負うところが多い。
昔はメモリが大変高価で、このデータのキャッシュが殆ど行われなかったので、いきおい回転数とシークタイムが重視された訳である。現在はキャッシュ効果の増大により、昔に比べ格段にこれらの要素の重要度が落ちた。
ところで内部データ転送速度というの数値は、理論値で現実の数値とは違う。これはかなり狭い範囲の実際のデータ部分だけを計算しているからだ。現実はデータ部分の他、ID値やGapなどの領域がハードディスクにはあるし、通常はたとえシーケンシャルアクセスの場合でも、シークなどのその他データが途切れる要因は沢山ある。こうしたことも考慮して実際連続的にデータを読んだ場合、どれくらいの速度になるかを計測したものが、連続データ転送速度(Sustained Data Transfer Rate)である。だいたい内部データ転送速度の7割くらいと考えていい。
こちらはカタログ値としては、現実の読み取り速度にかなり近い。実際シーケンシャルリードのベンチマークテストを行うと、ほぼ連続データ転送速度と同じ結果が得られる。ハードディスクベンダーによってはデータシートにこの数値を記載しているところもある。
ところで、連続データ転送速度の元になる、内部データ転送速度は、カタログなどを見ると、「256bps〜323bps」などと範囲で書かれている。これは外周と内周で当然1トラックの長さが違うためだ。円なのだから当然の話だが、昔は外周の方がセクターが長かったので、実は外周と内周の1トラック当りのセクター数には差が無かった。現在は大抵は、ゾーンビットレコーディングという技術により、内周と外周のセクター長が接近していて(同じではない)、それゆえ、1回転で読めるセクター数が違う。つまり同じ回転なら外周の方が速く(同じ時間で沢山のセクターが)読めるので、このような違いが出てくる。
因みにハードディスクのアドレスは、外周から振られるので、アドレス的に先頭にあるほうが外周となり、速度が速いことになる。皆さんはハードディスクをパーティションに分けて管理しているでしょうが、アクセス頻度の高いものは、先頭のパーティションに入れておいた方が、アクセス速度が速いので、このあたりも気を使ってデータ配置を考えるといいでしょう。
実際生のディスクの読み取り速度が、連続データ転送速度というものだが、ハードディスクからマザーボードまでの速度が所謂インターフェース速度だ。いくら連続データ転送速度が速くても、これが遅いのでは、実際OSなどからデータを読んだ時は遅くなってしまう。もっとも逆にインターフェース速度がいくら速くても、連続データ転送速度が遅いのでは、これもあまり意味がない。こういうのをよく「どこかがボトルネックになっている」なんていいますね。
ただし後者、つまりインターフェース速度の方が速い場合は、意味がなくもない。これは前述したようにハードディスクにはバッファがあり、これは所謂メモリである。もしここにデータがある場合は、インターフェース速度の速さが反映される。いずれにしても、インターフェース速度は、ハードディスクの連続データ転送速度を包含していることが望ましい。
インターフェース速度は、IDEとSCSIで分けて考察する必要がある。まずIDEの場合、以前はPIOモードか、DMAモードの違いがよく話題になった。CPUに負担をかけないDMAモードがいいと盛んに言われてきた。これは確かにそうだが、必ずしもいいとは限らない場合もあった。それはCPUに負担をかけないとはいっても誰かが転送の面倒をみなくてはならない。ではDMAモードの場合、だれが面倒をみるのかと言えば、それはIDEコントローラである。もしこのコントローラの性能が非常に悪く、一方でCPUに非常に高性能なものを使用している場合は、あえてDMAにしないで、PIOとし速いCPUに転送の面倒をみてもらった方がいい場合もある。
という訳で、必ずしもDMAモードがいいという訳ではないが、現在のIDEコントローラの性能からすれば、やはりこれにまかし、CPUには別の仕事をしてもらった方がいいだろう。もっとも現在では、PIOモードなど殆どないので、これをあまりとやかく言う必要はない。やはり重要なのは、その速度である。
現在DMAモードにも、モード1、モード2、UltraDMA/33、UltraDMA/66、UltraDMA/100などがある。殆どのマザーボード(正確にはそのチップセット)がUltraDMA/66以上をサポートしている現在、それ以前のものはここでは考察しない。UltraDMAの後ろの数値は転送速度(MB/sec)を表している。これも理論値なので、やはり7割程度が実効値だと言われている。それでも、UltraDMA/33で、23,4MB/sの実効値があるわけだから、初めて対応のハードディスクが出たころ、当時のハードディスクは連続データ転送速度は10MB/s程度だったので、よくインターフェース側のオーバースペックだと言われた。つまりハードディスクの方がボトルネックになっていた。
UltraATA/66対応のハードディスクが出たころも同じことをよく言われたが、2000年1月頃、UltraATA/33では足りないハードディスクが登場して、やっとインターフェースがボトルネックになった。当時まだUltraDMA/66インターフェースをサポートしたチップセットが潤沢ではなかったので、PromiseやAbitのUltraDMA/66インターフェースカードが結構売れたし、これらのチップを搭載したマザーボードが沢山出回っていたものである。
ところで各インターフェースにおいて、どれくらいの速度のハードディスクの場合、インターフェース側がボトルネックになるのか、知りたい人も多いでしょう。新しいハードディスクを購入する場合、合わせてインターフェース側をアップグレードすべきか、その必要がないかを判断する材料になるからである。以下のその検証結果を記載する。
まず前述のようにインターフェース速度も、内部データ転送速度も共に、理論値と実効値との差が7割なので、単純にその速度を比較してみればいい。つまりインターフェース速度よりも速い内部データ転送速度のハードディスクを購入する場合、インターフェースを上位のものにアップグレードした方がいいということだ。
しかし内部データ転送速度の実効値は、だいたいその7割である、連続データ転送速度であると申し上げたが、これもアプリケーションレベルでいうとあまり現実的な数値ではない。前述のように内部データ転送速度の最高値はハードディスクの最外周のデータであり、しかもシーケンシャルリードという、かなり理想的な読み込み状態での話である。ベンチマークテストなどの場合、この数値がでるが、日常のアプリケーションレベルでは、内周にもアクセスするだろうし、頻繁ランダムアクセスも起こる。従って、これは経験値的にベンチマークテストレベルより3割以上遅くなると考えられる。そのあたりを踏まえ、各インターフェースで、どれくらいの内部データ転送速度のハードディスクの場合、インターフェース側がボトルネックとなるのかを表にまとめてみた。
[インターフェースがボトルネックになるハードディスクの内部データ転送速度]
ベンチマークテストレベル | アプリケーションレベル | |
UltraDMA/33 | 280Mbps | 360Mbps |
UltraDMA/66 | 560Mbps | 730Mbps |
UltraDMA/100 | 840Mbps | 1090Mbps |
ベンチマークテストおたくや、ベンチマークの結果がどうしても気になるという人は、各インターフェースでベンチマークテストレベルを超える内部データ転送速度を持つハードディスクを購入したら、インターフェースのアップグレードを考えた方がいいだろう。しかしそのあたりが気にならないなら、アプリケーションレベルのボトルネックを超えるまでは、現在のインターフェースのままでも、「速いハードディスクがかわいそう」という程にはならないと言えよう。
2003年3月現在、最も速いIDEハードディスク(IBM Deskstar 180GXP)で、内部データ転送速度の最高値が699Mbpsである。第2位がSeagate Barracuda 7200.7の683Mbpsである。つまりUltraDMA/66のアプリケーションレベルに達しているものはないのである。従って現在は、インターフェース速度こそ既にUltraDMA/133が登場しているものの、UltraDMA/100にアップグレードしなければならない場面すら殆どない。
ただ、インターフェース速度で気をつけたいのがこれらはチャネル単位だということだ。IDEにはプライマリチャネルとセンカンダリチャネルの2つのチャネルがあり、1チャネルにマスターとスレーブの2台が接続できて、計4台が繋がる訳だが、インターフェースの速度はそのチャネル毎の速度になり、ドライブ毎ではない。
また、アクセスもチャネル単位なので、マスターとスレーブに同時にアクセスすることはできない。このへんの事情がハードディスクは別のチャネルに接続した方がいいと言われる所以である。このあたりRAID構成にする場合もいえることなので、気をつけておきたいことである。